﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Collections;

namespace TechControl.BD
{
    class FuncionarioDB: BaseDB
    {
        private static FuncionarioDB instance;
        
        private FuncionarioDB() { }

        public static FuncionarioDB getInstance()
        {
            if (instance == null)
            {
                instance = new FuncionarioDB();
            }
            return instance;
        }

        //inseri um novo registro na tabela
        public void insertNewFunc(Int64 codFuncionario, string nome, string cpf, string rg, string endereco, string telefone, string email,
            string status, string data)
        {
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("INSERT INTO TB_FUNCIONARIO VALUES('"+codFuncionario+"','"+nome+"', '"+cpf+"', '"+rg+
                    "', '" + endereco + "', '" + telefone + "', '" + email + "', '" + status + "', '" + data + "');", this.conn);
                command.ExecuteNonQuery();
            }
            finally
            {
                this.close();
            }
        }

        //pega o ultimo código de funcionário inserido.
        public Int64 getLastCodFunc()
        {
            Int64 result = 0;
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Select MAX(ID_FUNCIONARIO) FROM TB_FUNCIONARIO;", this.conn);
                SqlDataReader rdr = command.ExecuteReader();

                while (rdr.Read())
                {
                    result = rdr.GetInt64(0);
                }
            }
            catch (Exception)
            {
                result = 0;
            }
            finally
            {
                this.close();
            }
            return result;
        }

        //update na tabela mudando status do funcionário para = "DESLIGADO"
        public void updateDeslFunc(Int64 codFuncionario)
        {
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Update tb_funcionario set status = 'DESLIGADO' where id_funcionario = '"+codFuncionario+"';",this.conn);
                command.ExecuteNonQuery();
            }
            finally
            {
                this.close();
            }
        }

        //guarda os valores de um registro.
        private Funcionario toFuncionario(SqlDataReader reader)
        {
            Funcionario funcionario = new Funcionario();
            funcionario.codFuncionario = reader.GetInt64(0);
            funcionario.nomeFuncionario = reader.GetString(1);
            funcionario.cpf = reader.GetString(2);
            funcionario.rg = reader.GetString(3);
            funcionario.endereco = reader.GetString(4);
            funcionario.telefone = reader.GetString(5);
            funcionario.email = reader.GetString(6);

            return funcionario;
        }

        //busca todos os valores de acordo com o código informado.
        public ArrayList selectByCodFunc(Int64 codFunc)
        {
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("SELECT * FROM tb_funcionario WHERE id_funcionario=@codFunc;", this.conn);
                command.Parameters.AddWithValue("@codFunc", codFunc);
                SqlDataReader rdr = command.ExecuteReader();
                ArrayList result = new ArrayList();
                while (rdr.Read())
                {
                    result.Add(this.toFuncionario(rdr));
                }
                return result;
            }
            finally
            {
                this.close();
            }
        }

        //update na tabela mudando status do funcionário para = "DESLIGADO"
        public bool updateAllValues(Int64 codFuncionario, string nome, string cpf, string rg, string endereco, string email, string telefone)
        {
            bool result = false;
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("Update tb_funcionario set nome = '" + nome + "', cpf = '" + cpf + "', rg = '" + rg +
                    "', endereco = '" + endereco + "', telefone = '" + telefone + "', email = '" + email + "' where id_funcionario = '" + codFuncionario + "';", this.conn);
                command.ExecuteNonQuery();
                result = true;
            }
            catch (Exception)
            {
                result = false;
            }
            finally
            {
                this.close();
            }

            return result;
        }

        //retorna o nome do funcionário de acordo com o código informado.
        public string selectNameByCod(Int64 cod)
        {
            string result = "";
            try
            {
                this.open();
                SqlCommand command = new SqlCommand("select nome, rg from tb_funcionario where id_funcionario = '" + cod + "';", this.conn);
                SqlDataReader rdr = command.ExecuteReader();
                while (rdr.Read())
                {
                    result = rdr.GetString(0) +"="+rdr.GetString(1);
                }
            }
            finally
            {
                this.close();
            }
            return result;
        }
    }
}
